在大部分程式語言中,分號通常被放在一行程式碼的最尾端,來表示這行程式碼到這裡就結束了。
然而在 JavaScript 中,你可能會注意到,有時候你可以不加分號而程式碼仍然運作正常。這是因為 JavaScript 具有一個稱為「自動分號插入
」(Automatic Semicolon Insertion
,簡稱 ASI
)的機制。本篇文章將介紹 ASI,以及談談到底要不要省略分號。
ASI 是 JavaScript 解析器中的一個機制,它幫助確定在哪些位置插入分號,以結束程式碼行。當 JavaScript 發現某行程式碼後面缺少分號且語法合法時,它會嘗試自動插入分號,以確保程式碼的正確性。
關於 ASI 的規則其實非常多,這裡就只舉一些較常見的例子。
下面的第一行程式碼尾端會自動插入分號,將 a 和 b 分開
let a = 42 let b = 15
但是下面這樣的寫法是不行的:
let a=1 let b=2 // 報錯
ASI 會自動幫我們補上分號,聽起來很方便,但它也可能造成一些容易誤解的情況。直接看例子。
- 以下函式的 return 後面會被補上分號,導致回傳結果為 undefined 而不是物件。
function getItem() { return { message: 'Hello' } } const myItem = getItem(); console.log(myItem); // 印出 undefined
- 以下兩個立即函式只會輸出「AAA」並接著報錯,
這是因為 ASI 規則中,新的一行開頭是(
、[
、/
,則不會自動補上分號。(function printA() { console.log('AAA'); })() (function printB() { console.log('BBB'); })()
直接說我的想法,我個人偏向盡量不要省略分號。理由如下:
C/C++
、Java
、C#
等,這時省略分號可是會直接吃編譯錯誤的。今天介紹了 JavaScript 的 自動分號插入(ASI)
。雖然我並不支持省略分號,但我認為我們還是需要大概了解一下 JavaScript 的省略分號機制,所以還是拿出來講了。那麼今天就到這邊,明天見~